Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(split): wired split over serial support #2080

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from

Conversation

xudongzheng
Copy link
Contributor

This is very preliminary WIP wired split over serial support.

Motivation

The motivation for this implementation is to define "wired splits" in a way that can be used for more than just split keyboards with two halves.

  • This includes support for multiple serial devices. Currently it's one UART and USB CDC CDM but can easily be extended to more.
  • uint32_t "command" is used to identify the message type. Currently one is defined for split key states. Users can define additional ones and use USB CDC ACM to add custom functionality.
  • The communication protocol is very simple and can be easily implemented in most high level languages.
  • ZMK developers can in theory pipe USB CDC ACM into native_sim and use a production keyboard for development.

Currently Implemented

  • Central RX
  • CRC32
  • UART interrupt (hardware UART) and polling (RP2040 PIO UART and native_sim)

@pierzchalski
Copy link

@M1cha @xudongzheng Based on the most recent discussion from #1954, was there any consensus reached on how these two two PRs interact?
More specifically, if I had a wired split keyboard (no BLE) which I wanted to get ZMK working on, is one or the other currently easier to get started with?

@xudongzheng
Copy link
Contributor Author

This PR and #1954 are two independent implementations, both with some parts complete and some parts missing. I plan on working on this PR further after the refactoring part #2086 is finalized.

I would say both PRs should be considered pre-alpha quality. Both should work in theory but will likely require some effort in debugging and patching code to get working.

@AgentElement
Copy link

AgentElement commented Sep 29, 2024

I managed to get this PR working across two adafruit_KB2040 boards driving a split charlieplex keyboard. The KB2040 is an appealing target for this task, as it has a soldered-on JST connector that exposes two GPIO pins, which makes a wired connection easy to implement for nearly any shield. @caksoylar recommended that I link my config here: https://github.com/AgentElement/heartstopper-zmk

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants